package treeNode;

/**
 * 最小路径
 * 给定一个二叉树，找出其最小深度。
 * 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
 * 说明：叶子节点是指没有子节点的节点。
 */
public class MinLength {

    public int minDepth(TreeNode root){
        return minDepth(root,0);
    }

   public int minDepth(TreeNode root,int depth){
        if(root==null){
            return depth;
        }else{
            depth++;
            if(isLeaf(root.left)||isLeaf(root.right)){
                depth++;
                return depth;
            } else if(root.left==null&&root.right==null){
                return depth;
            } else if (root.left!=null&&root.right==null){
                return minDepth(root.left,depth);
            }else if(root.left==null&&root.right!=null){
                return minDepth(root.right,depth);
            }else{
                return Math.min(minDepth(root.left,depth),minDepth(root.right,depth));
            }
        }
    }

    /**
     * 判断节点是否是叶节点
     * @param node
     * @return
     */
    public boolean isLeaf(TreeNode node){
       if(node==null){
           return false;
       }else if(node.left==null&&node.right==null){
           return true;
       }else{
           return false;
       }
   }

   public static void main(String[] args){
       TreeNode root = new TreeNode(2,null,new TreeNode(3,new TreeNode(3),null));
       MinLength minLength = new MinLength();
       System.out.println(minLength.minDepth(root));
   }
}
